﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using SachOnlineLibrary.BLL;
using SachOnlineLibrary.Public;
public partial class WebUserControl : System.Web.UI.UserControl
{
    SachBLL lib = new SachBLL();
    public List<Sach> listsach;
    List<Loai> listloai = new List<Loai>();
    
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            DropDownList_Load();
            GridviewSach_Load();
            lblThongBao.Text = "";
        }
    }
    
    private void GridviewSach_Load()
    {
        listsach = lib.LietKeTatCaSach();
        gdvSach.DataSource = listsach.Where(s => s.TrangThai.Equals(true)).ToList();
        gdvSach.DataBind();
    }
    
    private void DropDownList_Load()
    {
        //dropdownlist them va sua
        listloai = lib.LietKeTatCaLoai();
        Loai loai = new Loai();
        loai.TenLoai = "--Chọn loại--";
        loai.MaLoai = 0;
        listloai.Insert(0, loai);
        ddlLoai.DataSource = listloai;
        ddlLoai.DataTextField = "TenLoai";
        ddlLoai.DataValueField = "MaLoai";
        ddlLoai.DataBind();
        //dropdownlist loc
        List<Loai> listloailoc = lib.LietKeTatCaLoai();
        Loai item = new Loai();
        item.TenLoai = "Tất cả các loại";
        item.MaLoai = 0;
        listloailoc.Insert(0, item);
        ddlLoaiSach.DataSource = listloailoc;
        ddlLoaiSach.DataTextField = "TenLoai";
        ddlLoaiSach.DataValueField = "MaLoai";
        ddlLoaiSach.DataBind();
    }
    
    private void HienThiThongBao(String thongbao)
    {
        lblThongBao.Text = thongbao;
        lblThongBao.Visible = true;
    }
    
    protected void gdvSach_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "suasach")
        {
            themsuasach.Visible = true;
            lblTrangThai.Visible = true;
            ddlTrangThai.Visible = true;
            btnOK.Visible = false;
            btnOKSua.Visible = true;
            //Lay sach can sua
            Sach sach = lib.LietKeTheoID(int.Parse(e.CommandArgument.ToString()));
            Session["sachsua"] = sach;
            //Dien thong tin vao textbox
            txtTenSach.Text = sach.TenSach;
            ddlLoai.SelectedValue = sach.MaSach.ToString();
            txtMoTa.Text = sach.Mota;
            ddlSoLuong.Text = sach.SoLuong.ToString();
            txtNhaXuatBan.Text = sach.NhaXuatBan;
            txtGiaTien.Text = sach.GiaTien.ToString();
            txtTacGia.Text = sach.TacGia;
            ddlTrangThai.SelectedIndex = sach.TrangThai.Equals(true) ? 0 : 1;
        }
    }

    protected void ddlLoaiSach_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (int.Parse(ddlLoaiSach.SelectedValue.Trim()) != 0)
        {
            List<Sach> list = lib.LietKeTatCaSach();
            gdvSach.DataSource = list.Where(s => s.MaLoai.Equals(int.Parse(ddlLoaiSach.SelectedValue.Trim())) && s.TrangThai.Equals(true)).ToList();
            gdvSach.DataBind();
        }
        else
        {
            gdvSach.DataSource = listsach;
            gdvSach.DataBind();
        }
        lblThongBao.Text = "";
    }

    protected void gdvSach_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gdvSach.PageIndex = e.NewPageIndex;
        LocSach();
    }
    
    protected void btnThemSach_Click(object sender, ImageClickEventArgs e)
    {
        themsuasach.Visible = true;
        lblTieude.Text = "THÊM SÁCH";
    }
    
    protected void btnCancel_Click(object sender, ImageClickEventArgs e)
    {
        txtTenSach.Text = "";
        txtTacGia.Text = "";
        txtNhaXuatBan.Text = "";
        txtMoTa.Text = "";
        ddlSoLuong.SelectedIndex = 0;
        txtGiaTien.Text = "";
        themsuasach.Visible = false;
    }
    
    protected void btnOK_Click(object sender, ImageClickEventArgs e)
    {

        if (KiemTraGiaTriThem())
        {
            fuHinh.SaveAs(MapPath("..\\Images\\Sach\\" + fuHinh.FileName));
            if (lib.ThemSach(int.Parse(ddlLoai.SelectedValue),txtTenSach.Text, txtMoTa.Text,long.Parse(txtGiaTien.Text),int.Parse(ddlSoLuong.SelectedValue),txtTacGia.Text,txtNhaXuatBan.Text,fuHinh.FileName))
            {
                DropDownList_Load();
                GridviewSach_Load();
                HienThiThongBao("Thêm sách thành công");
            }
            else
            {
                HienThiThongBao("Thêm sách không thành công, lỗi server, vui lòng thử lại sau");
            }
            themsuasach.Visible = true;
        }
    }

    protected void btnTimKiem_Click(object sender, ImageClickEventArgs e)
    {
        LocSach();
    }

    private void LocSach()
    {
        listsach = lib.LietKeTatCaSach();
        listsach = listsach.Where(s => s.TenSach.ToLower().Contains(txtTimKiem.Text.ToLower().Trim())).ToList();
        switch (ddlHienThiSach.SelectedIndex)
        {
            case 0:
                {
                    listsach = listsach.Where(s => s.TrangThai.Equals(true)).ToList();
                    break;
                }
            case 1:
                {
                    listsach = listsach.Where(s => s.SoLuong.Equals(0) && s.TrangThai.Equals(true)).ToList();
                    break;
                }
            case 2:
                {
                    listsach = listsach.Where(s => s.TrangThai.Equals(false)).ToList();
                    break;
                }
        }
        if (ddlLoaiSach.SelectedIndex == 0)
        {
            gdvSach.DataSource = listsach;
            gdvSach.DataBind();
        }
        else
        {
            gdvSach.DataSource = listsach.Where(s => s.MaLoai.Equals(int.Parse(ddlLoaiSach.SelectedValue))).ToList();
            gdvSach.DataBind();
        }
    }

    protected void btnOKSua_Click(object sender, ImageClickEventArgs e)
    {
        Sach item = lib.LietKeSachTheoTenVaTacGia(txtTenSach.Text.Trim(), txtTacGia.Text.Trim());
        Sach sach = (Sach)Session["sachsua"];
        int empty;

        if (txtTenSach.Text.Trim().Length == 0 || txtTenSach.Text.Trim().Length >= 100)
        {
            HienThiThongBao("Tên sách không được để trống hoặc dài quá 100 ký tự");
        }
        else if (int.Parse(ddlLoai.SelectedValue) == 0)
        {
            HienThiThongBao("Chưa chọn loại sách");
        }
        else if (txtNhaXuatBan.Text.Trim().Length >= 50 && txtNhaXuatBan.Text.Trim().Length == 0)
        {
            HienThiThongBao("Nhà xuất bản không được để trống hoặc dài hơn 50 ký tự");
        }
        else if (int.TryParse(txtGiaTien.Text.Trim(), out empty) == false || int.Parse(txtGiaTien.Text.Trim()) <= 0 || int.Parse(txtGiaTien.Text.Trim()) > 10000000)
        {
            HienThiThongBao("Chưa nhập giá tiền hoặc giá tiền nhập sai");
        }
        else if (txtTacGia.Text.Trim().Length <= 0 || txtTacGia.Text.Trim().Length >= 100)
        {
            HienThiThongBao("Tác giả không được để trống hoặc dài quá 100 ký tự");
        }
        else if (txtMoTa.Text.Trim().Length >= 500)
        {
            HienThiThongBao("Mô tả chỉ cho phép tối đa 500 ký tự");
        }
        else if (item != null && item.MaSach != sach.MaSach)
        {
            HienThiThongBao("Đã tồn tại sách với cùng tên sách và tác giả");
        }
        else
        {
            sach.MaLoai = int.Parse(ddlLoai.SelectedValue);
            sach.TenSach = txtTenSach.Text;
            sach.NhaXuatBan = txtNhaXuatBan.Text;
            sach.SoLuong = int.Parse(ddlSoLuong.SelectedValue);
            sach.GiaTien = long.Parse(txtGiaTien.Text);
            sach.TacGia = txtTacGia.Text;
            sach.NgayCapNhat = DateTime.Now;
            sach.Mota = txtMoTa.Text;
            sach.TrangThai = ddlTrangThai.SelectedIndex.Equals(0) ? true : false;
            if (fuHinh.HasFile)
            {
                sach.Hinh = fuHinh.FileName;
                fuHinh.SaveAs(MapPath("..\\Images\\Sach\\" + sach.Hinh));
            }
            if (lib.SuaSach(sach))
            {
                HienThiThongBao("Sửa thông tin sách thành công");
                LocSach();
                themsuasach.Visible = false;
                Session.Remove("sachsua");
            }
            else
            {
                HienThiThongBao("Sửa thông tin sách không thành công, lỗi server, vui lòng thử lại sau");
            }
        }
    }

    private bool KiemTraGiaTriThem()
    {
        int empty;
        bool flag = true;
        Sach item = lib.LietKeSachTheoTenVaTacGia(txtTenSach.Text.Trim(), txtTacGia.Text.Trim());
        if (txtTenSach.Text.Trim().Length == 0 || txtTenSach.Text.Trim().Length >= 100)
        {
            HienThiThongBao("Tên sách không được để trống hoặc dài quá 100 ký tự");
            flag = false;
        }
        else if (int.Parse(ddlLoai.SelectedValue) == 0)
        {
            HienThiThongBao("Chưa chọn loại sách");
            flag = false;
        }
        else if (int.Parse(ddlSoLuong.SelectedValue) == 0)
        {
            HienThiThongBao("Chưa chọn số lượng");
            flag = false;
        }
        else if (txtNhaXuatBan.Text.Trim().Length >= 50 && txtNhaXuatBan.Text.Trim().Length == 0)
        {
            HienThiThongBao("Nhà xuất bản không được để trống hoặc dài hơn 50 ký tự");
            flag = false;
        }
        else if (int.TryParse(txtGiaTien.Text.Trim(), out empty) == false || int.Parse(txtGiaTien.Text.Trim()) <= 0 || int.Parse(txtGiaTien.Text.Trim()) > 10000000)
        {
            HienThiThongBao("Chưa nhập giá tiền hoặc giá tiền nhập sai");
            flag = false;
        }
        else if (txtTacGia.Text.Trim().Length <= 0 || txtTacGia.Text.Trim().Length >= 100)
        {
            HienThiThongBao("Tác giả không được để trống hoặc dài quá 100 ký tự");
            flag = false;
        }
        else if (!fuHinh.HasFile)
        {
            HienThiThongBao("Chưa chọn hình");
            flag = false;
        }
        else if (txtMoTa.Text.Trim().Length >= 500)
        {
            HienThiThongBao("Mô tả chỉ cho phép tối đa 500 ký tự");
            flag = false;
        }
        else if (item != null)
        {
            HienThiThongBao("Sách đã tồn tại");
            flag = false;
        }
        return flag;
    }
}